
package br.com.aeternu.controleatendimento;

import java.awt.AWTException;
import java.awt.SystemTray;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import org.apache.log4j.Logger;
import br.com.aeternu.controleatendimento.exception.ControleAtendimentoException;

/**
 * Principal classe do sistema, responsável por inicializar os mecanismos necessários para operação.
 * 
 * @author Janeiro/2014: Junio de Souza Fernandes <DD>
 */
public class Main
{

   /** Registra as operações do sistema */
   private static Logger logger = Logger.getLogger(Main.class);

   /**
    * Método principal que inicializa o sistema para Controle do Atendimento.
    * 
    * @param args argumentos para inicialização (opcionais/não definidos)
    */
   public static void main(String[] args)
   {
      try
      {
         defineVisual();

         if (suportaIconeBandeja())
         {
            new SysTray();
         }
         else
         {

         }
      }
      catch (ControleAtendimentoException e)
      {
         logger.error(e.getMessage(), e);
      }
      catch (ClassNotFoundException e)
      {
         logger.error(e.getMessage(), e);
      }
      catch (InstantiationException e)
      {
         logger.error(e.getMessage(), e);
      }
      catch (IllegalAccessException e)
      {
         logger.error(e.getMessage(), e);
      }
      catch (UnsupportedLookAndFeelException e)
      {
         logger.error(e.getMessage(), e);
      }
      catch (AWTException e)
      {
         logger.error(e.getMessage(), e);
      }
   }

   /**
    * Define o Look And Feel do sistema monitor baseado no visual do próprio sistema operacional.
    * 
    * @throws ClassNotFoundException
    * @throws InstantiationException
    * @throws IllegalAccessException
    * @throws UnsupportedLookAndFeelException
    */
   private static void defineVisual() throws ClassNotFoundException, InstantiationException, IllegalAccessException,
      UnsupportedLookAndFeelException
   {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      UIManager.put("OptionPane.yesButtonText", "Sim");
      UIManager.put("OptionPane.noButtonText", "Não");
   }

   /**
    * Verifica se o sistema operacional suporta o uso de ícones da bandeja (<CODE>SystemTray</CODE>).
    * 
    * @return Retorna <CODE>true</CODE> caso o sistema operacional suporte ícone da bandeja; <CODE>false</CODE> em caso contrário.
    * @throws ControleAtendimentoException
    * @throws MonitorException A exceção disparada diz respeito ao sistema não suportar ícone da bandeja.
    */
   private static boolean suportaIconeBandeja() throws ControleAtendimentoException
   {
      boolean ret = SystemTray.isSupported();

      if (!ret)
      {
         throw new ControleAtendimentoException("Este sistema operacional não suporta ícone da bandeja.");
      }

      return ret;
   }
}
